package com.robotic.sensor.mapper;

import java.util.List;
import com.robotic.sensor.domain.RegionBoundary;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 区域边界定义Mapper接口
 * 
 * @author robotic
 * @date 2024-01-20
 */
@Mapper
public interface RegionBoundaryMapper
{
    /**
     * 查询区域边界定义
     * 
     * @param id 区域边界定义主键
     * @return 区域边界定义
     */
    public RegionBoundary selectRegionBoundaryById(Long id);

    /**
     * 根据区域代码查询区域边界定义
     * 
     * @param regionCode 区域代码
     * @return 区域边界定义
     */
    public RegionBoundary selectRegionBoundaryByCode(String regionCode);

    /**
     * 查询区域边界定义列表
     * 
     * @param regionBoundary 区域边界定义
     * @return 区域边界定义集合
     */
    public List<RegionBoundary> selectRegionBoundaryList(RegionBoundary regionBoundary);

    /**
     * 查询启用状态的区域边界定义列表，按优先级排序
     * 
     * @return 区域边界定义集合
     */
    public List<RegionBoundary> selectActiveRegionBoundariesOrderByPriority();

    /**
     * 根据边界类型查询区域边界定义列表
     * 
     * @param boundaryType 边界类型
     * @return 区域边界定义集合
     */
    public List<RegionBoundary> selectRegionBoundaryByType(String boundaryType);

    /**
     * 根据坐标范围查询可能包含该点的区域边界定义列表
     * 
     * @param x X坐标
     * @param y Y坐标
     * @param z Z坐标
     * @return 区域边界定义集合
     */
    public List<RegionBoundary> selectRegionBoundaryByCoordinateRange(@Param("x") String x, @Param("y") String y, @Param("z") String z);

    /**
     * 新增区域边界定义
     * 
     * @param regionBoundary 区域边界定义
     * @return 结果
     */
    public int insertRegionBoundary(RegionBoundary regionBoundary);

    /**
     * 修改区域边界定义
     * 
     * @param regionBoundary 区域边界定义
     * @return 结果
     */
    public int updateRegionBoundary(RegionBoundary regionBoundary);

    /**
     * 删除区域边界定义
     * 
     * @param id 区域边界定义主键
     * @return 结果
     */
    public int deleteRegionBoundaryById(Long id);

    /**
     * 批量删除区域边界定义
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteRegionBoundaryByIds(Long[] ids);

    /**
     * 批量插入区域边界定义
     * 
     * @param regionBoundaryList 区域边界定义列表
     * @return 结果
     */
    public int batchInsertRegionBoundary(List<RegionBoundary> regionBoundaryList);

    /**
     * 更新区域边界定义状态
     * 
     * @param id 区域边界定义主键
     * @param status 状态（0-禁用，1-启用）
     * @return 结果
     */
    public int updateRegionBoundaryStatus(@Param("id") Long id, @Param("status") String status);

    /**
     * 检查区域代码是否已存在
     * 
     * @param regionCode 区域代码
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 存在的记录数
     */
    public int checkRegionCodeUnique(@Param("regionCode") String regionCode, @Param("excludeId") Long excludeId);

    /**
     * 根据区域代码列表查询区域边界定义
     * 
     * @param regionCodes 区域代码列表
     * @return 区域边界定义集合
     */
    public List<RegionBoundary> selectRegionBoundaryByCodes(@Param("regionCodes") List<String> regionCodes);

    /**
     * 统计区域边界定义数量
     * 
     * @param regionBoundary 查询条件
     * @return 统计结果
     */
    public int countRegionBoundary(RegionBoundary regionBoundary);
}